package com.haruhinav.mapper;

import com.haruhinav.entity.Address;
import com.haruhinav.entity.AddressType;
import com.haruhinav.entity.extend.AddressEX;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
/**
 *
 *
 * */
@Mapper
public interface AddressMapper {
    //所有地址 一对一
    List<Address> getAllAddress(AddressEX addressEX);
    //所有地址 根据类型 一对多
    List<AddressType> getAllAddressByType();
    //所有地址 根据类型 一对多 v2
    List<AddressType> getAllAddressByTypeV2();

    //根据类型id查找类型
    AddressType findAddressTypeById(@Param("id") int id);

//    所有地址
    List<AddressType> queryAllAddressType(AddressType addressType);

//    总数
    Integer countAddress();

//  修改状态
    Integer updateState(@Param("state") Integer state,@Param("id") Integer id);

//    添加
    Integer insertAddress(Address address);
//   根据id查找
    Address findAddressById(@Param("id") Integer id);
//    修改
    int updateAddress(Address address);
//根据id删除地址
    int removeAddressById(@Param("id") Integer id);
// 所有地址 以及查询
   // List<AddressType> queryAllType(AddressType addressType);

//    添加地址类型
    int insertAddressType(AddressType addressType);

//    修改类型的label color
    int updateAddressTypeLabelColoe(@Param("lc") String labelColoe,@Param("id") Integer id);

    //    修改类型的tag color
    int updateAddressTypeTagColoe(@Param("tc") String tagColoe,@Param("id") Integer id);
//      用于辅助添加 查询大于等于预添加的index的index数据 区间index+1
    int updateAddressTypeIndexPutOne(@Param("newIndex")int index);
//    辅助删除地址类型 使被删除的数据（index）之后的数据的index-1
    int updateAddressTypeIndexCutOne(@Param("oldIndex")int index);
//    删除地址类型
    int removeAddressTypeById(@Param("id") int id);

//    根据地址类型id删除地址
    int delAddressByTypeId(@Param("tid") int typeId);
//    修改地址类型
    int updateAddressType(AddressType addressType);
//当预修改的index变大时。。。往后排 查询区间index的ids -1

    int indexBiggerCutOne(@Param("newIndex") Integer newIndex,@Param("oldIndex") Integer oldIndex);
//当预修改的index变小时。。。往前排 查询区间index的ids +1
    int indexSmallerPutOne(@Param("newIndex") Integer newIndex,@Param("oldIndex") Integer oldIndex);

//仅修改index
    int updateAddressTypeIndex(@Param("index") Integer index,@Param("id") int id);
}
